#include<stdio.h>
#include<stdlib.h>
#include "jm.h"


#define N 100

int q = 1;
int n = 0;
char a;

struct student
{
    int id;
    float cj[3];
    float pj;
} stu[N];

int lrcj(int n)
{
    printf("请输入学生人数:");
    scanf("%d", &n);
    printf("\n");
    printf("请输入%d名学生的三门课成绩:\n", n);
    printf("学号 语文 数学 外语\n");
    for (int i = 0; i < n; i++)
    {
        stu[i].id = i + 1;
        printf("%d", stu[i].id);
        for (int j = 0; j < 3; j++)
        {
            scanf("%f", &stu[i].cj[j]);
        }
    }
    return n;
}

void list(struct student *s)
{
    printf("学生成绩如下:\n");
    printf("学号    语文    数学    外语    平均分\n");
    for (int i = 0; i < n; i++)
    {
        printf("%d     ", s[i].id);
        for (int j = 0; j < 3; j++)
        {
            printf("  %.1f  ", s[i].cj[j]);
        }
        printf("   %.1f\n", s[i].pj);
    }
}

float average(struct student *s)
{
    for (int i = 0; i < n; i++)
    {
        s[i].pj = (s[i].cj[0] + s[i].cj[1] + s[i].cj[2]) / 3.0;
    }
    printf("平均分已计算。请使用命令L查看。\n");
}

void sort(struct student *s)
{
    struct student p;
    for (int i = 0; i < n - 1; i++)
    {
        if (s[i].pj < s[i + 1].pj)
        {
            p = s[i];
            s[i] = s[i + 1];
            s[i + 1] = p;
        }
    }
    printf("完成排序。请使用命令L查看\n");
}

void search(int p, struct student *s)
{
    printf("请输入要查询的学生学号:");
    scanf("%d", &p);
    printf("学号    语文    数学    外语    平均分\n");
    for (int i = 0; i < n; i++)
    {
        if (s[i].id == p)
        {
            printf("%d     ", s[i].id);
            for (int j = 0; j < 3; j++)
            {
                printf("  %.1f  ", s[i].cj[j]);
            }
            printf("   %.1f\n", s[i].pj);
        }
    }
}

void quit(int q)
{
    if (q == 0)
    {
        printf("Press any key to continue\n");
        exit;
    }
}

void ml()
{
    printf("\r请输入命令=");
    scanf("%c", &a);
    switch (a)
    {
    case 'H':
        csjm();
        break;
    case 'T':
        n = lrcj(n);
        break;
    case 'A':
        if (n == 0)
        {
            printf("成绩表为空!请先使用命令T录入学生成绩。\n");
        }
        else
        {
            average(stu);
        }
        break;
    case 'L':
        if (n == 0)
        {
            printf("成绩表为空!请先使用命令T录入学生成绩。\n");
        }
        else
        {
            list(stu);
        }
        break;
    case 'P':
        if (n == 0)
        {
            printf("成绩表为空!请先使用命令T录入学生成绩。\n");
        }
        else
        {
            sort(stu);
        }

        break;
    case 'S':
        if (n == 0)
        {
            printf("成绩表为空!请先使用命令T录入学生成绩。\n");
        }
        else
        {
            int m;
            search(m, stu);
        }

        break;
    case 'C':
        system("clear");
        break;
    case 'Q':
        q = 0;
        quite(q);
        break;
    default:
        break;
    }
}